# 列表 list
# 按位置存放多个值

# 定义
l1 = [1, 1.2, 'a']
l2 = list([1, 2, 3])

# 类型转换
# 只要是可迭代对象都能转换成为列表
l3 = list('hello')
print(l3)  # ['h', 'e', 'l', 'l', 'o']
# 字典是将key值转换为列表
l4 = list({'jack': 18, 'lisa': 23, 'mark': 44})  # ['jack', 'lisa', 'mark']
print(l4)

# 常用方法

# 按照索引取值
# 正向取值
l5 = [1, 2, 3]
print(l5[0])  # 1
# 反向取值
print(l5[-1])  # 3

# 切片
l6 = [1, 2, 3, 4]
print(l6[0:2])  # [1, 2]
print(l6[0:2:2])  # [1]
print(l6[::-1])  # [4, 3, 2, 1]
print(l6[3:0:-1])  # [4, 3, 2]
# 长度
# len 和 __len()_
print(len(l6))  # 4
print(l6.__len__())  # 4

# 插入
# append 在列表的末尾插入元素
l7 = [1, 2, 3]
l7.append(4)
print(l7)  # [1, 2, 3, 4]

# insert 在索引位置插入元素，其余元素后移
l7.insert(0, 5)
print(l7)  # [5, 1, 2, 3, 4]
# extend 将可迭代对象中的元素添加到列表末尾
l8 = [6, 7, 8]
l7.extend(l8)
print(l7)  # [5, 1, 2, 3, 4, 6, 7, 8]

# 删除
# del 公共删除方法
l9 = [1, 2, 2, 2, 2, 3, 4, 5, 6]
del l9[1]
print(l9)  # [1, 2, 2, 2, 3, 4, 5, 6]

# pop 按索引删除,不指定索引默认删除最后一个元素
l9.pop(0)
print(l9)  # [2, 2, 2, 3, 4, 5, 6]

# remove 按照元素删除,删除找到的第一个相同的元素
l9.remove(2)
print(l9)  # [2, 2, 3, 4, 5, 6]

# count 统计元素个数
l10 = [1, 1, 2, 2, 3, 4, 5]
print(l10.count(1))  # 2

# index 返回列表中该元素的第一个下标
l11 = [1, 1, 2, 2, 3, 4, 5]
print(l11.index(2))  # 2

# clear 清空列表
l12 = [1, 1, 2, 2, 3, 4, 5]
l12.clear()
print(l12)  # []

# reverse 反转列表
l13 = [1, 1, 2, 2, 3, 4, 5]
l13.reverse()
print(l13)  # [5, 4, 3, 2, 2, 1, 1]

# sort 排序默认升序 列表中元素必须为同种类型
l14 = [5, 1, 7, 2, 6, 4, 5]
l14.sort()
print(l14)  # [1, 2, 4, 5, 5, 6, 7]
l14.sort(reverse=True)  # 降序
print(l14)  # [7, 6, 5, 5, 4, 2, 1]


